Nate Breznau
Hung H.V. Nguyen
Setup
Our app is built so far as a set of functions. The file
00_Run_Theory.R loads all of these functions into the environment.
source(here::here("00_Run_Theory.R"))
theoRy v0.1
Breznau, Nate and Hung H.V. Nguyen
function build_causal_matrix loaded
function build_formula_matrix loaded
function build_dag_matrix loaded
function identify_compatible loaded
function plot_dag_matrix loaded
Build Causal Matrix
A theoRy causal matrix includes all possible causal configurations of
the variables supplied as input. Currently this is limited to 5 total
variables. The user places the variables ordinally in time. Then the
algorithm creates every possible causal model, such that every path is
either causal or not causal, and simultaneously occuring variables are
either not related or have a residual correlation.
The Causal Matrix output
The output of the causal matrix has one row per node dyad, and is
grouped by model.
{r )}
The function also outputs a summary of all variables, their labels
and their timing for the user.
Example Code
inputs <- list(nodes=c("a","b","c","d","e"), timing=c(0,-1,-2,-3,-3),
types=c("otc","test","ctr","ctr","ctr"))
causal_matrix <- build_causal_matrix(inputs)
VARIABLE SUMMARY
Y. Label = a. Timing = 0
Xtest. Label = b. Timing = -1
X1. Label = d. Timing = -3
X2. Label = e. Timing = -3
X3. Label = c. Timing = -2
Keep minimal
This function may be retired.
Remove Xs which do not belong to the MAS from each model and remove
duplicated models deriving from this action
reduced_causal_matrix <- keep_minimal(formula_matrix, causal_matrix)
reduced_formula_matrix <- build_formula_matrix(reduced_causal_matrix)
Build Dag Matrix
This function converts lavaan style formulas into daggity objects.
The daggity package has its own format for storing objects. This format
may include information about where to plot the nodes. For example Model
1:
dag { X1 [pos=“-1.250,1.000”] X2 [pos=“-1.250,-0.500”] X3
[pos=“-0.500,-1.000”] Xtest [exposure,pos=“0.250,0.000”] Y
[outcome,pos=“1.000,0.000”] X1 -> X1 X1 -> X3 X1 -> Xtest X1
-> Y X1 <-> X2 X2 -> X2 X2 -> X3 X2 -> Xtest X2 ->
Y X3 -> X3 X3 -> Xtest X3 -> Y Xtest -> Xtest Xtest -> Y
Y -> Y }
These objects are ideal for dagitty functions and for plotting.
This function also stores the minimum X value for later plotting
purposes in Results/minX.RDS.
dag_matrix <- build_dag_matrix(formula_matrix)
Plot DAG Matrix
This function takes the dagitty objects in dag_matrix and plots them
with a title and MAS. All plots are stored in a list using recordPlot().
This allows the user to quickly recall any plot.
The save_plots option when switched to TRUE, will save every
plot as a .png file in the Results folder.
The title option is TRUE by default and displays the “Model
#” where # refers to the row in the dag_matrix
The title_pos option should be a number from 0 (furthest
left in the graph) to the highest value, which depends on how wide the
plot is (usually not higher than 2) with a default of 0.5
dag_plots <- plot_dag_matrix(dag_matrix, save_plots = F)
































































































































































































































































































































































































































































































































References
packages %>%
map(citation) %>%
print(style = "text")
LS0tDQp0aXRsZTogIjAxIHRoZW9SeSBVc2VyIEluc3RydWN0aW9ucyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCk5hdGUgQnJlem5hdSA8YnI+DQpIdW5nIEguVi4gTmd1eWVuDQoNCiMjIFNldHVwDQoNCk91ciBhcHAgaXMgYnVpbHQgc28gZmFyIGFzIGEgc2V0IG9mIGZ1bmN0aW9ucy4gVGhlIGZpbGUgMDBfUnVuX1RoZW9yeS5SIGxvYWRzIGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgaW50byB0aGUgZW52aXJvbm1lbnQuDQoNCmBgYHtyIHNldHVwLCB3YXJuaW5nID0gRn0NCg0Kc291cmNlKGhlcmU6OmhlcmUoIjAwX1J1bl9UaGVvcnkuUiIpKQ0KDQpgYGANCg0KIyMgQnVpbGQgQ2F1c2FsIE1hdHJpeA0KDQpBIHRoZW9SeSBjYXVzYWwgbWF0cml4IGluY2x1ZGVzIGFsbCBwb3NzaWJsZSBjYXVzYWwgY29uZmlndXJhdGlvbnMgb2YgdGhlIHZhcmlhYmxlcyBzdXBwbGllZCBhcyBpbnB1dC4gQ3VycmVudGx5IHRoaXMgaXMgbGltaXRlZCB0byA1IHRvdGFsIHZhcmlhYmxlcy4gVGhlIHVzZXIgcGxhY2VzIHRoZSB2YXJpYWJsZXMgb3JkaW5hbGx5IGluIHRpbWUuIFRoZW4gdGhlIGFsZ29yaXRobSBjcmVhdGVzIGV2ZXJ5IHBvc3NpYmxlIGNhdXNhbCBtb2RlbCwgc3VjaCB0aGF0IGV2ZXJ5IHBhdGggaXMgZWl0aGVyIGNhdXNhbCBvciBub3QgY2F1c2FsLCBhbmQgc2ltdWx0YW5lb3VzbHkgb2NjdXJpbmcgdmFyaWFibGVzIGFyZSBlaXRoZXIgbm90IHJlbGF0ZWQgb3IgaGF2ZSBhIHJlc2lkdWFsIGNvcnJlbGF0aW9uLiANCg0KIyMjICpUaGUgaW5wdXRzIG9iamVjdCo6DQoNClRoZSBvYmplY3QgJ2lucHV0cycgdGFrZXMgdGhlIGZvcm0gb2YgYSBuYW1lZCBsaXN0LiANCg0KSW4gdGhlICdpbnB1dHMgbGlzdDoNCg0KMS4gTm9kZXMgY2FuIGJlIGdpdmVuIGFueSBhbHBoYS1udW1lcmljIG5hbWluZyBjb252ZW50aW9uLCBidXQgZm9yIHBsb3R0aW5nIGFuZCBjb21wYXJpc29uIHdpbGwgYmUgdHJhbnNmb3JtZWQgaW50byBYMS1YbiBiYXNlZCBvbiB0aGUgdGltaW5nLg0KDQoyLiBUaW1pbmcgcmVxdWlyZXMgZW50ZXJpbmcgaW50ZWdlcnMgZnJvbSAwIGJhY2t3YXJkcy4gWmVybyBzaG91bGQgYmUgZ2l2ZW4gdG8gdGhlIG91dGNvbWUgKG90YykgdmFyaWFibGUgYW5kIGFsbCBvdGhlciBpbmRlcGVuZGVudCB2YXJpYWJsZXMgbmVlZCB0byBiZSBjaHJvbm9sb2dpY2FsbHkgb3JkZXJlZC4gTm90IHJlYWwgdGltZSwgYnV0IG9yZGluYWwgdGltaW5nIG9mIGV2ZW50cy4gSXQgaXMgcG9zc2libGUgZm9yIHZhcmlhYmxlcyB0byBvY2N1ciBzaW11bHRhbmVvdXNseSwgZXZlbiBpZiB0aGlzIGlzIGp1c3Qgb2JzZXJ2YXRpb25hbGx5KQ0KDQozLiBUeXBlcyBpbmNsdWRlICJ0ZXN0IiwgIm90YyIsIG9yICJjdHIiLiANCiAgICBhLiAiY3RyIiBpcyBhIGNvbnRyb2wgb3IgYWRqdXN0bWVudCB2YXJpYWJsZSB0aGF0IGlzIG5vdCB0aGUgdGVzdCB2YXJpYWJsZSBpbiBxdWVzdGlvbg0KICAgIGIuICJ0ZXN0IiBpcyB0aGUgdGVzdCB2YXJpYWJsZSBpbiBxdWVzdGlvbiwgdHJlYXRtZW50IGZvciBleGFtcGxlLg0KICAgIGMuICJvdGMiIGlzIHRoZSBvdXRjb21lLCBkZXBlbmRlbnQgdmFyaWFibGUuDQoNCiMjIyAqVGhlIENhdXNhbCBNYXRyaXggb3V0cHV0Kg0KDQpUaGUgb3V0cHV0IG9mIHRoZSBjYXVzYWwgbWF0cml4IGhhcyBvbmUgcm93IHBlciBub2RlIGR5YWQsIGFuZCBpcyBncm91cGVkIGJ5IG1vZGVsLiANCg0KYHtyICFbY2F1c2FsX21hdHJpeCBleGFtcGxlXShoZXJlOjpoZXJlKCJNZWRpYSIsICJDYXVzYWxfTWF0cml4X0V4YW1wbGUucG5nIikpfWANCg0KVGhlIGZ1bmN0aW9uIGFsc28gb3V0cHV0cyBhIHN1bW1hcnkgb2YgYWxsIHZhcmlhYmxlcywgdGhlaXIgbGFiZWxzIGFuZCB0aGVpciB0aW1pbmcgZm9yIHRoZSB1c2VyLg0KDQojIyMgRXhhbXBsZSBDb2RlDQoNCmBgYHtyIGNhdXNhbF9tYXRyaXh9DQoNCmlucHV0cyA8LSBsaXN0KG5vZGVzPWMoImEiLCJiIiwiYyIsImQiLCJlIiksIHRpbWluZz1jKDAsLTEsLTIsLTMsLTMpLA0KICAgICAgICAgICAgICB0eXBlcz1jKCJvdGMiLCJ0ZXN0IiwiY3RyIiwiY3RyIiwiY3RyIikpDQoNCmNhdXNhbF9tYXRyaXggPC0gYnVpbGRfY2F1c2FsX21hdHJpeChpbnB1dHMpDQpgYGANCg0KDQojIyBCdWlsZCBGb3JtdWxhIE1hdHJpeA0KDQpUaGUgZm9ybXVsYSBtYXRyaXggY29udGFpbnMgbGF2YWFuIHN0eWxlIGZvcm11bGFzIHRvIGV4cHJlc3MgdGhlIGNhdXNhbCBtb2RlbHMuIFRoaXMgbWF0cml4IGhhcyBvbmUgbW9kZWwgcGVyIHJvdy4NCg0KbGF2YWFuIHN0eWxlIGZvcm11bGFzIHRha2Ugb24gdGhlIHN0eWxlIG9mIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgd2hpY2ggaXMgdGhlIGZpcnN0IG1vZGVsIChNb2RlbCAxKSBpbiB0aGUgZXhhbXBsZSBmb3JtdWxhX21hdHJpeDoNCg0KWSB+IFgxICsgWDIgKyBYMyArIFh0ZXN0ICsgWSANClgzIH4gWDEgKyBYMiArIFgzIA0KWHRlc3QgfiBYMSArIFgyICsgWDMgKyBYdGVzdCANClgxIH4gWDENClgyIH4gWDINClgyIH5+IFgxDQoNCldoZXJlIGVhY2ggdmFyaWFibGUgdGhhdCBoYXMgYSBjYXVzYWwgcGF0aCBjb21pbmcgaW50byBpdCBoYXMgaXRzIG93biBlcXVhdGlvbiBzaWduaWZpZWQgYnkgfi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIFtsYXZhYW5dKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9sYXZhYW4vbGF2YWFuLnBkZikgZG9jdW1lbnRhdGlvbi4NCg0KW1RvIGRldmVsb3AgZnVydGhlcl0gVGhlIGxhdmFhbiBmb3JtdWxhcyBpbiBvdXIgdXNhZ2UgY29udGFpbiByZWR1bmRhbmNpZXMsIGZvciBleGFtcGxlIHRoZSBEVnMgYXJlIHByZXNlbnQgb24gdGhlIHJpZ2h0LWhhbmQgc2lkZXMgb2YgdGhlIGVxdWF0aW9uLg0KDQpUaGUgZm9ybXVsYSBtYXRyaXggYWxzbyBpZGVudGlmaWVzIGFueSBtaW5pbWFsIGFkanVzdG1lbnQgc2V0cyAoTUFTKS4gQWRkIGNpdGF0aW9uIGhlcmUuDQoNCmBgYHtyIGZvcm11bGFfbWF0cml4fQ0KDQpmb3JtdWxhX21hdHJpeCA8LSBidWlsZF9mb3JtdWxhX21hdHJpeChjYXVzYWxfbWF0cml4KQ0KDQpgYGANCg0KIyMgS2VlcCBtaW5pbWFsDQoNClRoaXMgZnVuY3Rpb24gbWF5IGJlIHJldGlyZWQuIA0KDQpSZW1vdmUgWHMgd2hpY2ggZG8gbm90IGJlbG9uZyB0byB0aGUgTUFTIGZyb20gZWFjaCBtb2RlbCBhbmQgcmVtb3ZlIGR1cGxpY2F0ZWQgbW9kZWxzIGRlcml2aW5nIGZyb20gdGhpcyBhY3Rpb24NCg0KYGBge3Iga2VlcF9taW5pbWFsfQ0KcmVkdWNlZF9jYXVzYWxfbWF0cml4IDwtIGtlZXBfbWluaW1hbChmb3JtdWxhX21hdHJpeCwgY2F1c2FsX21hdHJpeCkNCnJlZHVjZWRfZm9ybXVsYV9tYXRyaXggPC0gYnVpbGRfZm9ybXVsYV9tYXRyaXgocmVkdWNlZF9jYXVzYWxfbWF0cml4KQ0KDQpgYGANCg0KIyMgQnVpbGQgRGFnIE1hdHJpeA0KDQpUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGxhdmFhbiBzdHlsZSBmb3JtdWxhcyBpbnRvIGRhZ2dpdHkgb2JqZWN0cy4gVGhlIGRhZ2dpdHkgcGFja2FnZSBoYXMgaXRzIG93biBmb3JtYXQgZm9yIHN0b3Jpbmcgb2JqZWN0cy4gVGhpcyBmb3JtYXQgbWF5IGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdG8gcGxvdCB0aGUgbm9kZXMuIEZvciBleGFtcGxlIE1vZGVsIDE6DQoNCmRhZyB7DQpYMSBbcG9zPSItMS4yNTAsMS4wMDAiXQ0KWDIgW3Bvcz0iLTEuMjUwLC0wLjUwMCJdDQpYMyBbcG9zPSItMC41MDAsLTEuMDAwIl0NClh0ZXN0IFtleHBvc3VyZSxwb3M9IjAuMjUwLDAuMDAwIl0NClkgW291dGNvbWUscG9zPSIxLjAwMCwwLjAwMCJdDQpYMSAtPiBYMQ0KWDEgLT4gWDMNClgxIC0+IFh0ZXN0DQpYMSAtPiBZDQpYMSA8LT4gWDINClgyIC0+IFgyDQpYMiAtPiBYMw0KWDIgLT4gWHRlc3QNClgyIC0+IFkNClgzIC0+IFgzDQpYMyAtPiBYdGVzdA0KWDMgLT4gWQ0KWHRlc3QgLT4gWHRlc3QNClh0ZXN0IC0+IFkNClkgLT4gWQ0KfQ0KDQpUaGVzZSBvYmplY3RzIGFyZSBpZGVhbCBmb3IgZGFnaXR0eSBmdW5jdGlvbnMgYW5kIGZvciBwbG90dGluZy4NCg0KVGhpcyBmdW5jdGlvbiBhbHNvIHN0b3JlcyB0aGUgbWluaW11bSBYIHZhbHVlIGZvciBsYXRlciBwbG90dGluZyBwdXJwb3NlcyBpbiBSZXN1bHRzL21pblguUkRTLg0KDQpgYGB7ciBidWlsZF9kYWdfbWF0cml4fQ0KDQpkYWdfbWF0cml4IDwtIGJ1aWxkX2RhZ19tYXRyaXgoZm9ybXVsYV9tYXRyaXgpDQoNCmBgYA0KDQojIyBQbG90IERBRyBNYXRyaXgNCg0KVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgZGFnaXR0eSBvYmplY3RzIGluIGRhZ19tYXRyaXggYW5kIHBsb3RzIHRoZW0gd2l0aCBhIHRpdGxlIGFuZCBNQVMuIEFsbCBwbG90cyBhcmUgc3RvcmVkIGluIGEgbGlzdCB1c2luZyByZWNvcmRQbG90KCkuIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIHF1aWNrbHkgcmVjYWxsIGFueSBwbG90Lg0KDQpUaGUgKnNhdmVfcGxvdHMqIG9wdGlvbiB3aGVuIHN3aXRjaGVkIHRvIFRSVUUsIHdpbGwgc2F2ZSBldmVyeSBwbG90IGFzIGEgLnBuZyBmaWxlIGluIHRoZSBSZXN1bHRzIGZvbGRlci4NCg0KVGhlICp0aXRsZSogb3B0aW9uIGlzIFRSVUUgYnkgZGVmYXVsdCBhbmQgZGlzcGxheXMgdGhlICJNb2RlbCAjIiB3aGVyZSAjIHJlZmVycyB0byB0aGUgcm93IGluIHRoZSBkYWdfbWF0cml4DQoNClRoZSAqdGl0bGVfcG9zKiBvcHRpb24gc2hvdWxkIGJlIGEgbnVtYmVyIGZyb20gMCAoZnVydGhlc3QgbGVmdCBpbiB0aGUgZ3JhcGgpIHRvIHRoZSBoaWdoZXN0IHZhbHVlLCB3aGljaCBkZXBlbmRzIG9uIGhvdyB3aWRlIHRoZSBwbG90IGlzICh1c3VhbGx5IG5vdCBoaWdoZXIgdGhhbiAyKSB3aXRoIGEgZGVmYXVsdCBvZiAwLjUNCg0KYGBge3IgcGxvdF9kYWdfbWF0cml4fQ0KZGFnX3Bsb3RzIDwtIHBsb3RfZGFnX21hdHJpeChkYWdfbWF0cml4LCBzYXZlX3Bsb3RzID0gRikNCmBgYA0KDQoNCiMjIENvbG9waG9uDQoNCmBgYHtyIGNwaG9ufQ0Kc2Vzc2lvbkluZm8oKQ0KYGBgDQoNCiMjIFJlZmVyZW5jZXMNCg0KYGBge3IgY2l0ZX0NCnBhY2thZ2VzICU+JQ0KICBtYXAoY2l0YXRpb24pICU+JQ0KICBwcmludChzdHlsZSA9ICJ0ZXh0IikNCmBgYA0K